Computing systems typically include several functional components. These components may include a central processing unit (CPU), main memory, input/output (“I/O”) devices, and storage devices (for example, tape drives). In conventional systems, the main memory is coupled to the CPU via a system bus or a local memory bus. The main memory is used to provide the CPU access to data and/or program information that is stored in main memory at execution time. Typically, the main memory is composed of random access memory (RAM) circuits. A computing system with the CPU and main memory is often referred to as a host system.
Host systems communicate with peripheral devices via an interface such as the Peripheral Component Interconnect (“PCI”) interface, a local bus standard using parallel data transfer, or the extension of PCI known as PCI-X. More recently, PCI Express (may also be referred to as PCIe), a standard interface incorporating PCI transaction protocols at the logical level, but using serial data transfer at the physical level has been developed to offer better performance than PCI or PCI-X.
PCIe devices may be connected using a PCIe cable. If a cable connecting two PCIe devices is disconnected or fails, the devices are not able to communicate with each other. One conventional solution to handle such a failure is to provide redundant devices that take over the operations of a device impacted by the failed or disconnected cable. This solution is expensive because one has to invest in multiple devices performing the same functionality.
Another solution has been to use multiple PCIe ports between devices. If a connection between two ports fails, then another port pair is used as part of a failover operation. This solution is also undesirable because it uses multiple port pairs for providing failover and hence not very cost-effective. Continuous efforts are being made to provide cost-effective failover solutions for inter-device communication.